package gjbsh.bangong.ds.service;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import gjbsh.bangong.ds.dao.组织活动报名Mapper;
import gjbsh.bangong.ds.model.组织活动;
import gjbsh.bangong.ds.model.组织活动单位参会名额;
import gjbsh.bangong.ds.model.组织活动报名;
import gjbsh.bangong.ds.model.组织活动报名Example;
import gjbsh.bangong.utils.CreateXLS;
import gjbsh.support.BooleanMessage;



@Service
public class 组织活动报名Service {

	@Autowired
	组织活动报名Mapper ddMapper;
	
	@Autowired
	组织活动Service dd组织活动Service;
	
	@Autowired
	组织活动单位参会名额Service dd组织活动单位参会名额Service;
	
	@Value("${userfilepath}")
	private String userfilepath;
	
	// 查找指定单位的正在活动的报名情况
	public List<Map<String, Object>> findByDeptId(String ppDeptId) {
		
		return ddMapper.findByDeptId(ppDeptId);
	}

	// 查询指定活动的报名人列表
	public List<Map<String, Object>> findByHuodongId(String ppHuodongId,String ppDeptName) {
		if(ppDeptName!=null && !ppDeptName.equals("")) {
			ppDeptName = "%"+ppDeptName+"%";
		}
		return ddMapper.findByHuodongId(ppHuodongId,ppDeptName);
	}
	
	// 查询该单位指定活动的参与人数
	public int countByHuodongIdAndDeptId(String ppDeptId,String ppHuodongId) {
		
       Object mmNum = ddMapper.countByHuodongIdAndDeptId(ppDeptId,ppHuodongId);		
	   return mmNum == null ? 0 : Integer.parseInt(mmNum.toString());
	} 
	
	
	// 通过组织活动报名id 查询指定的一条记录
	public Map<String, Object> findOne(String pp组织活动报名Id) {
		List<Map<String, Object>> mm组织活动报名 =  ddMapper.findByHuodongbaomingId(pp组织活动报名Id);
		return  mm组织活动报名.size() == 0 ? null: mm组织活动报名.get(0);
	}
	
	
	// 修改
	public boolean modify(组织活动报名 pp组织活动报名) {
		组织活动报名Example mmExample = new 组织活动报名Example();
		组织活动报名Example.Criteria criteria = mmExample.createCriteria();
		criteria.and组织活动报名idEqualTo(pp组织活动报名.get组织活动报名id());
		int mmisok = ddMapper.updateByExampleSelective(pp组织活动报名, mmExample);
		return mmisok > 0 ? true:false;
	}

	// 新增 
	public boolean add(组织活动报名 pp组织活动报名) {
		return ddMapper.insert(pp组织活动报名) == 1;
	}

	// 删除
	public boolean delete(String pp组织活动报名Id) {
		组织活动报名Example mmExample = new 组织活动报名Example();
		组织活动报名Example.Criteria criteria = mmExample.createCriteria();
		criteria.and组织活动报名idEqualTo(pp组织活动报名Id);
		int mmisok = ddMapper.deleteByExample(mmExample);
		return mmisok>0 ? true:false;
	}
	
	// 是否可以添加
	public BooleanMessage IsTianjai(String pp组织活动Id,String ppDeptId) {
		组织活动 mm组织活动 = dd组织活动Service.findOne(pp组织活动Id);
		if(mm组织活动 == null) {
			return BooleanMessage.getErrorMessage("该组织活动不存在");
		}
		Date mm起始Date = mm组织活动.get报名起始时间();
		Date mm截止Date = mm组织活动.get报名截止时间();
		SimpleDateFormat mmformatter = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");	
		SimpleDateFormat mmformatter2 = new SimpleDateFormat("yyyy-MM-dd");	
		
		String mm当前时间 = mmformatter.format(new Date());
		String mm报名起始时间= mmformatter2.format(mm起始Date);
		String mm报名截止时间= mmformatter2.format(mm截止Date);
		
		int mm超时 = mm当前时间.compareTo(mm报名截止时间+"-23-59-59");
		if(mm超时>0) {
			return BooleanMessage.getErrorMessage("已逾期 无法报名");
		}
		mm超时 = (mm报名起始时间+"-00-00-00").compareTo(mm当前时间);
		if(mm超时>0) {
			return BooleanMessage.getErrorMessage("尚未开始报名");
		}
		// 进行总人数的判断
	    int mm已报名人数 = 0;
			
	    Object mm已报 = ddMapper.countByHuodongId(pp组织活动Id);	
	    if(mm已报 !=null) {
	    	mm已报名人数 = Integer.parseInt(mm已报.toString());
	    }
		int mm总人数 = mm组织活动.get总人数().intValue();
		if(mm已报名人数 >= mm总人数 ) {
			return BooleanMessage.getErrorMessage("人数已满无法报名");
		}
		
		// 进行单位人数的判断
		组织活动单位参会名额 mm组织活动d单位参会名额= dd组织活动单位参会名额Service.findByDeptIdAndHuodongId(ppDeptId, pp组织活动Id);
		if(mm组织活动d单位参会名额 == null) {
			int mm单位已报名人数 = 0;
			
		    Object mm单位已报 = ddMapper.countByHuodongIdAndDeptId(ppDeptId, pp组织活动Id);	
		    if(mm单位已报 !=null) {
		    	mm单位已报名人数 = Integer.parseInt(mm单位已报.toString());
		    }
			int mm单位可报人数 = mm组织活动.get每单位可报名人数().intValue();
			if(mm单位已报名人数 >= mm单位可报人数 ) {
				return BooleanMessage.getErrorMessage("该单位报名人数已满无法报名");
			}
		}else {
			// 设置了 单位名额 从单位名额中判断
			int mm单位已报名人数 = 0;
			
		    Object mm单位已报 = ddMapper.countByHuodongIdAndDeptId(ppDeptId, pp组织活动Id);	
		    if(mm单位已报 !=null) {
		    	mm单位已报名人数 = Integer.parseInt(mm单位已报.toString());
		    }
			int mm单位可报人数 = mm组织活动d单位参会名额.get参会人数().intValue();
			if(mm单位已报名人数 >= mm单位可报人数 ) {
				return BooleanMessage.getErrorMessage("该单位报名人数已满无法报名");
			}
		}
		
		
		
		return BooleanMessage.getSuccessMessage("可以添加");
	}
	

	// 导出指定活动的查询结果
	public void exportBaomingList(String ppHuodongId,String ppDeptName,HttpServletRequest request,HttpServletResponse response) {
		List<List<String>> mmResultList = new ArrayList<List<String>>();
		
		if(ppDeptName!=null && !ppDeptName.equals("")) {
			ppDeptName = "%"+ppDeptName+"%";
		}
		
		List<Map<String, Object>> mm报名List = ddMapper.findByHuodongId(ppHuodongId,ppDeptName);
		
		List<String> mmTitleList = new ArrayList<String>();
		mmTitleList.add("序号");
		mmTitleList.add("活动名称");
		mmTitleList.add("姓名");
		mmTitleList.add("性别");
		mmTitleList.add("工作单位");
		
		mmTitleList.add("职务或职称");
		mmTitleList.add("手机");
		mmTitleList.add("报到日期");
		mmTitleList.add("到会时段");
		mmTitleList.add("是否住宿");
		
		mmTitleList.add("是否需要单间");
		mmTitleList.add("是否参加过培训");
		mmTitleList.add("离会日期");
		mmTitleList.add("其他要求");
		mmTitleList.add("发票抬头");
		
		mmTitleList.add("详细通讯地址");
		mmTitleList.add("邮编");
		
		mmResultList.add(mmTitleList);
		
		for (int i = 0; i < mm报名List.size(); i++) {
			Map<String,Object> mmMap = mm报名List.get(i);
			List<String> mmNeiRongList = new ArrayList<String>();
			
			String ppXuhao = Integer.toString((i+1));
			
			String ppHuodongNmae = mmMap.get("活动名称") == null ? "" : mmMap.get("活动名称").toString();
			String ppName = mmMap.get("姓名") == null ? "" : mmMap.get("姓名").toString();
			String ppXingbie = mmMap.get("性别名称") == null ? "" : mmMap.get("性别名称").toString();
			String ppDanweiName = mmMap.get("工作单位") == null ? "" : mmMap.get("工作单位").toString();
			
			String ppZhiwu = mmMap.get("职务或职称") == null ? "" : mmMap.get("职务或职称").toString();
			String ppShouji = mmMap.get("手机") == null ? "" : mmMap.get("手机").toString();
			String ppBaodaoriqi = mmMap.get("报到日期") == null ? "" : mmMap.get("报到日期").toString();
			String ppDaohuishiduan = mmMap.get("到会时段名称") == null ? "" : mmMap.get("到会时段名称").toString();
			String ppIsZhusu = mmMap.get("是否住宿") == null ? "" : mmMap.get("是否住宿").toString();
			
			String ppIsDanjian = mmMap.get("是否需要单间名称") == null ? "" : mmMap.get("是否需要单间名称").toString();
			String ppCanjiapeixun = mmMap.get("是否参加过培训") == null ? "" : mmMap.get("是否参加过培训").toString();
			String ppLihuiriqi = mmMap.get("离会日期") == null ? "" : mmMap.get("离会日期").toString();
			String ppQita = mmMap.get("其他要求") == null ? "" : mmMap.get("其他要求").toString();
			String ppFapiaotaitou = mmMap.get("发票抬头") == null ? "" : mmMap.get("发票抬头").toString();
			
			String ppTongxundizhi = mmMap.get("详细通讯地址") == null ? "" : mmMap.get("详细通讯地址").toString();
			String ppYoubian = mmMap.get("邮编") == null ? "" : mmMap.get("邮编").toString();
			
			if(ppIsZhusu.equals("1")) {
				ppIsZhusu = "是";
			}else {
				ppIsZhusu = "否";
			}
			if(ppCanjiapeixun.equals("1")) {
				ppCanjiapeixun = "是";
			}else {
				ppCanjiapeixun = "否";
			}
			
			mmNeiRongList.add(ppXuhao);
			
			mmNeiRongList.add(ppHuodongNmae);
			mmNeiRongList.add(ppName);
			mmNeiRongList.add(ppXingbie);
			mmNeiRongList.add(ppDanweiName);
			
			mmNeiRongList.add(ppZhiwu);
			mmNeiRongList.add(ppShouji);
			mmNeiRongList.add(ppBaodaoriqi);
			mmNeiRongList.add(ppDaohuishiduan);
			mmNeiRongList.add(ppIsZhusu);
			
			mmNeiRongList.add(ppIsDanjian);
			mmNeiRongList.add(ppCanjiapeixun);
			mmNeiRongList.add(ppLihuiriqi);
			mmNeiRongList.add(ppQita);
			mmNeiRongList.add(ppFapiaotaitou);
			
			mmNeiRongList.add(ppTongxundizhi);			
			mmNeiRongList.add(ppYoubian);
			
			mmResultList.add(mmNeiRongList);
		}
		
		//取出文档存放的根目录，并去除文件最后的斜杠
		if(userfilepath.endsWith("/")){
			userfilepath  = userfilepath.substring(0, userfilepath.length()-1);
		}
		
		CreateXLS.createExcel(mmResultList, userfilepath+"/temp/zuzhihuodong/", ppHuodongId+"_baoming.xls", "baoming",request, response);
		
	}
	
	

}
